From ce5100a405ef4c01617f101f3d68f19e6df5c810 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Thu, 21 Sep 2006 15:34:10 -0600 Subject: [PATCH] [IA64] Avoid iterative VHPT purges Workaround to avoid iteratively purging 16M itr.d using 16k Xen VHPT page size. Signed-off-by: Anthony Xu --- xen/arch/ia64/vmx/vmmu.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/xen/arch/ia64/vmx/vmmu.c b/xen/arch/ia64/vmx/vmmu.c index 9412810f3d..8861caf364 100644 --- a/xen/arch/ia64/vmx/vmmu.c +++ b/xen/arch/ia64/vmx/vmmu.c @@ -456,7 +456,15 @@ IA64FAULT vmx_vcpu_itr_d(VCPU *vcpu, u64 slot, u64 pte, u64 itir, u64 ifa) } #endif pte &= ~PAGE_FLAGS_RV_MASK; - thash_purge_entries(vcpu, va, ps); + + /* This is a bad workaround + In Linux, region 7 use 16M pagesize and is identity mapped. + VHPT page size is 16K in XEN. If purge VHPT while guest insert 16M, + it will iteratively purge VHPT 1024 times, which makes XEN/IPF very + slow. XEN doesn't purge VHPT + */ + if (ps != _PAGE_SIZE_16M) + thash_purge_entries(vcpu, va, ps); gpfn = (pte & _PAGE_PPN_MASK)>> PAGE_SHIFT; if (VMX_DOMAIN(vcpu) && __gpfn_is_io(vcpu->domain, gpfn)) pte |= VTLB_PTE_IO; -- 2.30.2